package com.polaris.live.ui.party.fragment.base

import androidx.viewbinding.ViewBinding
import com.polaris.live.common.mvvm.viewmodel.BaseViewModel
import im.zego.minigameengine.IZegoGameActionCallback
import im.zego.minigameengine.IZegoGameEngineHandler
import im.zego.minigameengine.ZegoGameLoadState
import im.zego.minigameengine.ZegoGamePlayerState
import im.zego.minigameengine.ZegoGameRobotConfig
import im.zego.minigameengine.ZegoGameState

/**
 * BasePartyGameFragment
 *
 * @author Created by lucas on 2024/3/30 09:09
 * @since 1.0.0
 */
abstract class BasePartyGameFragment<VM : BaseViewModel, VB : ViewBinding> : BasePartyFragment<VM, VB>(),
    IZegoGameEngineHandler {

    // token 过期前 30s 触发回调，通常配合方法 updateToken 函数使用，回调函数无参；
    override fun onTokenWillExpire() {
    }

    // 通知游戏加载的状态
    override fun onGameLoadStateUpdate(gameLoadState: ZegoGameLoadState?) {
    }

    @Deprecated("Deprecated in Java")
    override fun onGameStateUpdate(p0: ZegoGameState?) {
    }

    // 通知游戏运行状态（SDK 版本为 1.4.0 及以上时，推荐使用此回调）
    override fun onGameStateUpdate(gameState: ZegoGameState?, reasonCode: Int) {
    }

    // 通知当前玩家的状态（游戏中/不在游戏中）
    override fun onPlayerStateUpdate(playerState: ZegoGamePlayerState?) {
    }

    // 通知反加载游戏成功
    override fun onUnloaded(gameID: String?) {
    }

    // 通知玩家需要补充游戏积分才能继续玩游戏
    override fun onChargeRequire(gameID: String?) {
    }

    // 如果加载游戏时设置了自定义播放游戏声音，会收到这个回调，通知开发者需要控制声音文件的播放
    override fun onGameSoundPlay(name: String?, isPlay: Boolean, url: String?, isLoop: Boolean, volume: Int) {
    }

    // 如果加载游戏时设置了自定义播放游戏声音，此回调通知开发者需要修改 onGameSoundPlay 提及的声音的音量。
    override fun onGameSoundVolumeChange(name: String?, volume: Int) {
    }

    // 通知游戏运行错误
    override fun onGameError(errorCode: Int, errorMessage: String?) {
    }

    // 通知游戏按钮点击事件
    override fun onActionEventUpdate(actionID: Int, data: String?) {
    }

    // 游戏每局结算信息，Json 格式内容
    override fun onGameResult(result: String?) {
    }

    // 在开始随机匹配半屏或全屏模式游戏前，如果需要配置机器人，会收到这个回调，开发者需要返回机器人的配置信息。
    override fun onRobotConfigRequire(gameID: String?): ZegoGameRobotConfig? {
        return null
    }

    // 加载游戏后，通知开发者要改变麦克风的状态。
    override fun onMicStateChange(isMute: Boolean) {
    }

    // 加载游戏后，通知开发者要改变扬声器的状态。
    override fun onSpeakerStateChange(userIDList: List<String?>?, isMute: Boolean) {
    }

    /**
     * 玩家在游戏内匹配模式游戏做动作，通过此回调通知开发者，开发者决定这个动作是否生效。
     * 允许执行，请调用 callback.onSuccess() ；
     * 不允许执行，请调用 callback.onFail(errorCode)
     *
     * actionID 举例如下：
     * 加入座位：1001
     * 离开座位：1002
     * 随机加入座位：1003
     */
    override fun onGameActionRequest(actionID: Int, data: String?, callback: IZegoGameActionCallback?) {
    }
}